﻿namespace UnityEditor
{
    using System;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;
    using UnityEngine;

    public sealed class PlayerSettings : UnityEngine.Object
    {
        internal static readonly char[] defineSplits = new char[] { ';', ',', ' ' };

        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern void GetBatchingForPlatform(BuildTarget platform, out int staticBatching, out int dynamicBatching);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern Texture2D GetIconForPlatformAtSize(string platform, int size);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern Texture2D[] GetIconsForPlatform(string platform);
        public static Texture2D[] GetIconsForTargetGroup(BuildTargetGroup platform)
        {
            Texture2D[] iconsForPlatform = GetIconsForPlatform(GetPlatformName(platform));
            if (iconsForPlatform.Length == 0)
            {
                return new Texture2D[GetIconSizesForTargetGroup(platform).Length];
            }
            return iconsForPlatform;
        }

        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern int[] GetIconSizesForPlatform(string platform);
        public static int[] GetIconSizesForTargetGroup(BuildTargetGroup platform)
        {
            return GetIconSizesForPlatform(GetPlatformName(platform));
        }

        internal static string GetPlatformName(BuildTargetGroup targetGroup)
        {
            <GetPlatformName>c__AnonStorey51 storey = new <GetPlatformName>c__AnonStorey51 {
                targetGroup = targetGroup
            };
            BuildPlayerWindow.BuildPlatform platform = BuildPlayerWindow.GetValidPlatforms().Find(new Predicate<BuildPlayerWindow.BuildPlatform>(storey.<>m__AB));
            return ((platform != null) ? platform.name : string.Empty);
        }

        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        public static extern string GetScriptingDefineSymbolsForGroup(BuildTargetGroup targetGroup);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern string GetTemplateCustomValue(string key);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        public static extern bool HasAspectRatio(AspectRatio aspectRatio);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        public static extern void SetAspectRatio(AspectRatio aspectRatio, bool enable);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern void SetBatchingForPlatform(BuildTarget platform, int staticBatching, int dynamicBatching);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern void SetIconsForPlatform(string platform, Texture2D[] icons);
        public static void SetIconsForTargetGroup(BuildTargetGroup platform, Texture2D[] icons)
        {
            SetIconsForPlatform(GetPlatformName(platform), icons);
        }

        public static void SetScriptingDefineSymbolsForGroup(BuildTargetGroup targetGroup, string defines)
        {
            if (!string.IsNullOrEmpty(defines))
            {
                defines = string.Join(";", defines.Split(defineSplits, StringSplitOptions.RemoveEmptyEntries));
            }
            SetScriptingDefineSymbolsForGroupInternal(targetGroup, defines);
        }

        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private static extern void SetScriptingDefineSymbolsForGroupInternal(BuildTargetGroup targetGroup, string defines);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        internal static extern void SetTemplateCustomValue(string key, string value);

        public static int accelerometerFrequency { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool advancedLicense { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool allowedAutorotateToLandscapeLeft { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool allowedAutorotateToLandscapeRight { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool allowedAutorotateToPortrait { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool allowedAutorotateToPortraitUpsideDown { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string aotOptions { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static ApiCompatibilityLevel apiCompatibilityLevel { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string bundleIdentifier { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string bundleVersion { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool captureSingleScreen { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static ColorSpace colorSpace { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string companyName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static UIOrientation defaultInterfaceOrientation { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool defaultIsFullScreen { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int defaultScreenHeight { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int defaultScreenWidth { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int defaultWebScreenHeight { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int defaultWebScreenWidth { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static ResolutionDialogSetting displayResolutionDialog { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int firstStreamedLevelWithResources { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string iPhoneBundleIdentifier { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string keyaliasPass { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string keystorePass { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static MacFullscreenMode macFullscreenMode { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool MTRendering { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string productName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static string ps3BackgroundPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static int ps3BootCheckMaxSaveGameSizeKB { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3DLCConfigPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static int ps3SaveGameSlots { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3SoundPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3ThumbnailPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3TitleConfigPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool ps3TrialMode { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3TrophyCommId { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3TrophyCommSig { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string ps3TrophyPackagePath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static RenderingPath renderingPath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool resizableWindow { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static Texture2D resolutionDialogBanner { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool runInBackground { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool statusBarHidden { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool stripPhysics { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static StrippingLevel strippingLevel { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool stripUnusedMeshComponents { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static TargetGlesGraphics targetGlesGraphics { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        internal static string[] templateCustomKeys { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool use32BitDisplayBuffer { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool useAnimatedAutorotation { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool useDirect3D11 { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool useMacAppStoreValidation { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool usePlayerLog { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        internal static string webPlayerTemplate { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static int xboxAdditionalTitleMemorySize { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        public static bool xboxDeployKinectResources { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxEnableAvatar { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxEnableKinect { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxEnableKinectAutoTracking { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxEnableSpeech { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxGenerateSpa { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string xboxImageXexFilePath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static bool xboxSkinOnGPU { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string xboxSpaFilePath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static uint xboxSpeechDB { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static Texture2D xboxSplashScreen { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

        public static string xboxTitleId { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

        [CompilerGenerated]
        private sealed class <GetPlatformName>c__AnonStorey51
        {
            internal BuildTargetGroup targetGroup;

            internal bool <>m__AB(BuildPlayerWindow.BuildPlatform p)
            {
                return (p.targetGroup == this.targetGroup);
            }
        }

        public sealed class Android
        {
            public static int bundleVersionCode { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            internal static bool createWallpaper { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool forceInternetPermission { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool forceSDCardPermission { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string keyaliasName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string keyaliasPass { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string keystoreName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string keystorePass { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool licenseVerification { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            public static AndroidSdkVersions minSdkVersion { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static AndroidPreferredInstallLocation preferredInstallLocation { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static AndroidShowActivityIndicatorOnLoading showActivityIndicatorOnLoading { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static AndroidSplashScreenScale splashScreenScale { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static AndroidTargetDevice targetDevice { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool use24BitDepthBuffer { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool useAPKExpansionFiles { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }
        }

        public sealed class iOS
        {
            public static string applicationDisplayName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool exitOnSuspend { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool prerenderedIcon { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool requiresPersistentWiFi { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static ScriptCallOptimizationLevel scriptCallOptimization { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSSdkVersion sdkVersion { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSShowActivityIndicatorOnLoading showActivityIndicatorOnLoading { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSStatusBarStyle statusBarStyle { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSTargetDevice targetDevice { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSTargetOSVersion targetOSVersion { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static iOSTargetResolution targetResolution { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }
        }

        public sealed class Metro
        {
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            private static extern void INTERNAL_get_splashScreenBackgroundColorRaw(out Color value);
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            private static extern void INTERNAL_get_tileBackgroundColor(out Color value);
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            private static extern void INTERNAL_set_splashScreenBackgroundColorRaw(ref Color value);
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            private static extern void INTERNAL_set_tileBackgroundColor(ref Color value);
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            public static extern bool SetCertificate(string path, string password);

            public static string applicationDescription { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string certificateIssuer { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            public static DateTime? certificateNotAfter
            {
                get
                {
                    long certificateNotAfterRaw = PlayerSettings.Metro.certificateNotAfterRaw;
                    if (certificateNotAfterRaw != 0)
                    {
                        return new DateTime?(DateTime.FromFileTime(certificateNotAfterRaw));
                    }
                    return null;
                }
            }

            private static long certificateNotAfterRaw { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            internal static string certificatePassword { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            public static string certificatePath { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            public static string certificateSubject { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; }

            public static string packageLogo { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string packageName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static Version packageVersion
            {
                get
                {
                    return new Version(packageVersionRaw);
                }
                set
                {
                    packageVersionRaw = value.ToString();
                }
            }

            private static string packageVersionRaw { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static Color? splashScreenBackgroundColor
            {
                get
                {
                    if (splashScreenUseBackgroundColor)
                    {
                        return new Color?(splashScreenBackgroundColorRaw);
                    }
                    return null;
                }
                set
                {
                    splashScreenUseBackgroundColor = value.HasValue;
                    if (value.HasValue)
                    {
                        splashScreenBackgroundColorRaw = value.Value;
                    }
                }
            }

            private static Color splashScreenBackgroundColorRaw
            {
                get
                {
                    Color color;
                    INTERNAL_get_splashScreenBackgroundColorRaw(out color);
                    return color;
                }
                set
                {
                    INTERNAL_set_splashScreenBackgroundColorRaw(ref value);
                }
            }

            public static string splashScreenImage { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            private static bool splashScreenUseBackgroundColor { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static Color tileBackgroundColor
            {
                get
                {
                    Color color;
                    INTERNAL_get_tileBackgroundColor(out color);
                    return color;
                }
                set
                {
                    INTERNAL_set_tileBackgroundColor(ref value);
                }
            }

            public static PlayerSettings.MetroApplicationForegroundText tileForegroundText { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string tileLogo { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string tileShortName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static PlayerSettings.MetroApplicationShowName tileShowName { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string tileSmallLogo { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string tileWideLogo { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }
        }

        public enum MetroApplicationForegroundText
        {
            Dark = 2,
            Light = 1
        }

        public enum MetroApplicationShowName
        {
            NotSet,
            AllLogos,
            NoLogos,
            StandardLogoOnly,
            WideLogoOnly
        }

        public sealed class Wii
        {
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            public static extern WiiMemoryArea GetMemoryArea(WiiMemoryLabel memoryLabel);
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            public static extern void ResetMemoryAreas();
            [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
            public static extern void SetMemoryArea(WiiMemoryLabel memoryLabel, WiiMemoryArea memoryArea);

            public static string companyCode { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static uint controllerCount { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool floatingPointExceptions { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string gameCode { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static string gameVersion { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static WiiHio2Usage hio2Usage { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static WiiRegion region { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool screenCrashDumps { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool supportsBalanceBoard { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool supportsClassicController { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool supportsMotionPlus { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }

            public static bool supportsNunchuk { [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get; [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set; }
        }
    }
}

